<?php
/**
 * @see ZendX_JQuery_View_Helper_UiWidget
 */
require_once "ZendX/JQuery/View/Helper/UiWidget.php";

/**
 * Помощник вида, реализующий множественный выбор свойств в структурах данных
 * 
 * @category Phorm
 * @package JQuery_View_Helper
 * @name /Phorm/JQuery/View/Helper/StructuresProperties.php
 * @copyright phorm.ru
 * @since 30.03.2012
 * @author vladimir@kachalov.net
 */

class Phorm_JQuery_View_Helper_StructuresProperties extends ZendX_JQuery_View_Helper_UiWidget {
	
	/**
	 * Рисуем элемент формы
	 *
	 * @param string $id Id HTML-элемента
	 * @param mixed $value Значение элемента
	 * @param mixed $attribs Массив атрибутов HTML-элемента
	 * @param mixed $options Массив опций HTML-элемента
	 * @return string
	 */
    
	public function structuresProperties($id, $value = null, $attribs = null, $options = null) {
		
		$attribs = $this->_prepareAttributes($id, $value, $attribs);
		
		/**
		 * Параметры списка и инициализация сортировки (если необходимо)
		 */
		
		$ul_id = $attribs['id'] . '-ul';
		$ulparams = array('id' => $ul_id);
		
		if(isset($attribs['sortable']) && $attribs['sortable']!=0) {
			$ulparams['data-uitype'] = 'sortable';
			$js = sprintf('%s("#%s").sortable();',
	                ZendX_JQuery_View_Helper_JQuery::getJQueryHandler(),
	                '[data-uitype=sortable]' // @todo перевести все виджеты на data()
	        );
        	$this->jquery->addOnLoad($js);
        	unset($attribs['sortable']);
		}
		
		/**
		 * Параметры элементов списка
		 * @todo добавить обработку параметра listparams везде, где используются списки
		 */
		
		if(isset($attribs['listparams'])) {
			$listparams = $attribs['listparams'];
			unset($attribs['listparams']);
		} else {
			$listparams = array();
		}
		$listparams = $this->_htmlAttribs($listparams);
		
		/**
		 * Сортируем список опций по пришедшим значениям
		 */
		
		if(is_array($value) && !empty($value)) {
			$tmp = array();
			foreach ($value as $val) {
				if(isset($options[$val])) {
					$tmp[$val] = $options[$val];
					unset($options[$val]);
				}
			}
			$options = $tmp + $options;
		}
		
		/**
		 * Возвращаем элемент типа чекбокс
		 */
		
		$separator = '</li>' . PHP_EOL . '<li' . $listparams . '>';
		
		$xhtml = array(
			'<ul' . $this->_htmlAttribs($ulparams) . '>',
				'<li' . $listparams . '>',
					$this->view->formMultiCheckbox($id, $value, $attribs, $options, $separator), 
				'</li>',
			'</ul>'
		);
		
		return join(PHP_EOL,$xhtml);
		
	}
	
}
